package com.doit.day02

//将class类和object类结合起来了
object _04_伴生类和伴生对象 {
  def main(args: Array[String]): Unit = {
    val zss: Student = new Student(1, "zss")

    //Student 是object类
    val ww: Student = Student(1, "ww")

    //在外部调用的时候，只能自己调用自己的属性方法，不能够互相访问
    println(ww.id)
    println(ww.name)

    println(Student.age)

  }
}
//如果说class类的类名和object类的类名一样，那么我们就称class类是object类的伴生类
//object类是class类的伴生对象
//他们用什么用嘞？？？？
//用处：动静分离
//伴生类和伴生对象可以互相访问对方私有的属性
//还可以在object中，重写里面的apply方法和unapply方法
//重写了apply方法 那么你发现创建对象的时候可以不用new
//重写unapply方法 ==》 可以很好地让对象实现模式匹配
class Student(val id:Int,val name:String){
  private val address:String = "北京清华大学校长办公室"
}
object Student{
  val age:Int = 18
  var gender:String = _
  //可以创建class对象的时候不用new
  def apply(id: Int, name: String): Student = new Student(id, name)
  //很好的实现模式匹配
  def unapply(arg: Student): Option[(Int, String)] = Some(arg.id, arg.name)
}
